/*
 * $Id:
 *
 * Copyright (C) 2011 Refiner Inc.
 * All right reserved
 *
 *============================================================
 * +rVPN Stack : HelperIF (VPN Helper Interface)
 *============================================================
 * abstract: VPN補助ツール用のスタックインタフェース
 * author  : MURATA
 * history :
 *
 */

#ifndef _RVS_HELPER_IF_H_
#define _RVS_HELPER_IF_H_

/*
 * Constants
 */

#define	MAX_P2PCON		100

/* センター接続状態 */
#define RVS_STAT_NONE	0x0000           /* 切断中 */
#define RVS_STAT_VPN	0x0001           /* センターVPN接続済み */
#define RVS_STAT_REG	0x0002           /* 登録完了 */
#define RVS_STAT_CONN	(RVS_STAT_VPN|RVS_STAT_REG)
                                         /* 接続完了(登録まで完了) */
#define	RVS_STAT_ERR	0x0004           /* センター接続エラー */

/* エラーコードタイプ */
#define RVS_REASON_2	2      /* 2ワードタイプ */
#define RVS_REASON_3    3      /* 3バイトタイプ */

/*
 * Structures
 */

/* ステータス情報 */
struct _rvs_status {
    unsigned short vpnstat;   /* センターVPNの状態 */
    short p2pcon;			  /* P2P-VPN現在の接続数 */
    const char** remotename;  /* 接続先ユーザIDリスト(p2pcon個分のchar*の配列) */
};

/* エラー情報 */
struct _rvs_error {
    unsigned short rtype;   /* エラーを起こしたリクエスト(VPN_CONN_REQ etc) */
    short reason_type;		/* エラーコードタイプ(=2: 2ワード、=3: 3バイト) */
    union {
        unsigned short reason2[2];   /* 2ワードタイプエラーコード */
        unsigned char reason3[4];    /* 3バイトタイプエラーコード */
    } reason;
    const char* remote;			/* (存在するなら)通信相手のユーザID */
};

typedef struct _rvs_status rvs_status_t;
typedef struct _rvs_error rvs_error_t;

/*
 * Functions
 */

/* ステータスとエラーをチェックする */
int  rvs_status_check(rvs_status_t* statusp, rvs_error_t* errorp);


#endif /* _RVS_HELPER_IF_H_ */


